/*****************************************************************
 Jorge Lainfiesta                Carné 11142
 Rodrigo Medrano                 Carné 11222
 Luis Fernando Valdeavellano     Carné 11218
 Sección 21

 Manejador.java
 * Administra los recursos y comprueba que los recursos sean válidos
*****************************************************************/

import java.util.ArrayList;
import java.util.List;

public class Manejador {
    private List<Aeropuerto> aeropuertos;
    private List<Aerolinea> aerolineas;
    private List<Vuelo> vuelos;
    private List<Vuelo> vuelosCancelados;
    private List<Boleto> boletos;

    //Constructos. Inicializa las listas.
    public Manejador(){
        this.aeropuertos = new ArrayList();
        this.aerolineas = new ArrayList();
        this.vuelos = new ArrayList();
        this.vuelosCancelados = new ArrayList();
        this.boletos = new ArrayList();
    }

    //Asigna valores a los atributos de este objeto.
    public void asignarRecursos(Recursos recursos){
        this.aeropuertos = recursos.getAeropuertos();
        this.aerolineas = recursos.getAerolineas();
        this.vuelos = recursos.getVuelos();
    }

    /**
     * @return the aeropuertos
     */
    public List<Aeropuerto> getAeropuertos() {
        return aeropuertos;
    }

    //Método que retorna como String los nombres de Aeropuertos
    public String[] getAeropuertosString(){
        String[]result = new String[aeropuertos.size()];
        int i = 0;

        System.out.println(aeropuertos.size());
        for(Aeropuerto e: aeropuertos){
            result[i] = e.getNombre();
            i++;
        }
        return result;
    }
    //Método que retorna como String los nombres de Aerolineas
    public String[] getAerolineasString(){
        String[]result = new String[aerolineas.size()];
        int i = 0;

        for(Aerolinea e: aerolineas){
            result[i] = e.getNombre();
            i++;
        }
        return result;
    }
    
    //Método que retorna como String los nombres de Aerolineas
        //Método que retorna como String los nombres de Vuelos
    public String[] getVuelosString(){
        String[]result = new String[vuelos.size()];
        int i = 0;

        for(Vuelo e: vuelos){
            Vuelo este = e;
            Aeropuerto llegada = este.getAeropuertoLlegada();
            Aeropuerto salida = este.getAeropuertoSalida();
            result[i] = este.getId()+": "+salida.getNombre()+"("+salida.getDireccion()+")"+" – "+llegada.getNombre()+"("+llegada.getDireccion()+")";
            i++;
        }
        return result;
    }

    //Método que retorna como String los nombres de Vuelos cancelados
    public String[] getVuelosCanceladosString(){
        String[]result = new String[vuelosCancelados.size()];
        int i = 0;

        for(Vuelo e: vuelosCancelados){
            Vuelo este = e;
            Aeropuerto llegada = este.getAeropuertoLlegada();
            Aeropuerto salida = este.getAeropuertoSalida();
            result[i] = este.getId()+": "+salida.getNombre()+"("+salida.getDireccion()+")"+" – "+llegada.getNombre()+"("+llegada.getDireccion()+")";
            i++;
        }
        return result;
    }

    //Método para agregar vuelos.
    public void addVuelo(Vuelo nuevo){
        if(!(this.vuelos.size()>0)){
            nuevo.setId(1);
        }
        else{
            int last = vuelos.get(this.vuelos.size()-1).getId();
            last++;
            nuevo.setId(last);
            
        }vuelos.add(nuevo);
    }

    public int posicion(String ele, String[] todo){
        int result = -1;
        for(int i = 0; i<todo.length; i++){
            if(todo[i].equals(ele))
                return i;
        }
        return result;
    }

    /**
     * @return the aerolineas
     */
    public List<Aerolinea> getAerolineas() {
        return aerolineas;
    }

    /**
     * @return the vuelos
     */
    public List<Vuelo> getVuelos() {
        return vuelos;
    }

    /**
     * @return the vuelosCancelados
     */
    public List<Vuelo> getVuelosCancelados() {
        return vuelosCancelados;
    }

    /**
     * @return the boletos
     */
    public List<Boleto> getBoletos() {
        return boletos;
    }
}